 .section .text.entry
    .globl _start
# -----------------调试输出S（进入入口）--------------------------
_start:
    li      t0, 0x10000000  # UART基地址（QEMU virt固定）
    li      t1, 'S'         # 发送调试标记'S'
    sb      t1, 0(t0)
# -------------------------- 初始化栈指针+调试输出P --------------------------
    la      sp, stack_top   # 栈指针指向栈顶（与链接脚本.stack段对应）
    li      t1, 'P'         # 发送调试标记'P'（栈初始化开始）
    sb      t1, 0(t0)
# -------------------------- 清零BSS段+调试输出H --------------------------
bss_clear_start:
    la      t2, _bss        # BSS段起始地址
    la      t3, _ebss       # BSS段结束地址
bss_clear_loop:
    bge     t2, t3, bss_clear_done  # 清零完成则退出循环
    sw      zero, 0(t2)              # 32位清零（适配RISC-V 32位）
    addi    t2, t2, 4                # 地址+4（下一个32位变量）
    j       bss_clear_loop
bss_clear_done:
    li      t1, 'H'         # 发送调试标记'H'（BSS清零完成）
    sb      t1, 0(t0)
# -------------------------- 跳转到kernel_main --------------------------
    la      t4, kernel_main
jalr    zero, 0(t4)

# -------------------------- 死循环防止跑飞 --------------------------
infinite_loop:
    j       infinite_loop
# -------------------------- 栈空间定义（BSS段）--------------------------
    .section .bss
    .align 12               # 4KB对齐（满足RISC-V规范）
stack_bottom:
    .space 4096             # 4KB栈空间
stack_top:

# -------------------------- BSS段边界符号 --------------------------
    .globl _bss
    .globl _ebss
_bss:
_ebss: